/* Использование LCD Функций для дисплеев с вплоть до 2x40 символов */
   
/* Используется LCD 2x16, микроконтроллер AT90S2313.
   Схема подключения см. рис. 375 */ 

/* Демонстрируется использование функций записи в DDRAM LCD */
/* Демонстрируется вывод текста, содержащего русские буквы */

#include <90s2313.h> 		// подключаем  заголовочный файл используемого 
				   		// микроконтроллера AVR
 
/* Перед подключением файла lcd.h, объявим порт, используемый 
   для подключения модуля LCD */

/* Используем Порт B микроконтроллера AT90S2313 
   Адрес порта находим в файле 90s2313.h в строке: sfrb PORTB=0x18; */
#asm
		.equ __lcd_port=0x18
#endasm
 
/* Теперь, перед использованием LCD Функций для дисплеев с вплоть 
   до 2x40 символов, подключим заголовочный файл lcd.h */ 
#include <lcd.h>

/* Определим тип данных byte 
   byte==unsigned char */
typedef unsigned char byte;

/* Основная функция программы */ 

void main(void)
{
byte command_addr;	// определим переменную command_addr, 
// для хранения кода команды установки 
// адреса ячейки видеопамяти DDRAM

/* инициализируем LCD 2x16 */
lcd_init(16);

/* очистим LCD */
lcd_clear();

/* Вычислим значение кода команды установки адреса ячейки 
   видеопамяти DDRAM
   	   Адреса ячеек DDRAM первой строки LCD начинаются с 0x00
    	   Адреса ячеек DDRAM второй строки LCD начинаются с 0x40 (64) 
   (см. "LCD Функции", стр. 474) 
   	   Чтобы получить код команды установки адреса в DDRAM, следует
   	   установить бит 7 в 1 (см. табл. 64, стр. 480). Следующие 7-мь битов 
   (с 0-го по 6-ой) отводятся для адреса ячейки видеопамяти DDRAM  */

/* Выведем фразу "Hello!" в середину первой строки, т.е. первая буква
   должна быть выведена в 5-ую ячейку (5-ое знакоместо) первой 
   строки LCD 
   	   Счет ячеек начинается с 0 */
   	command_addr=0b10000101;	// напомним, что 5=0b00000101
   
/* Вывод "Hello!" */
lcd_write_byte(command_addr,'H');
lcd_write_byte(command_addr+1,'e');
lcd_write_byte(command_addr+2,'l');
lcd_write_byte(command_addr+3,'l');
lcd_write_byte(command_addr+4,'o');
lcd_write_byte(command_addr+5,'!');

/* Выведем фразу "Привет" в середину второй строки, т.е. первая буква
   должна быть выведена в 5-ую ячейку (5-ое знакоместо) второй 
   строки LCD
   
   Счет ячеек начинается с 0 
   Адрес требуемой ячейки видеопамяти DDRAM: 64+5=69 */
command_addr=0b11000101;    // напомним, что 69=0b01000101

/* Вывод "Привет"
   	   Коды символов см. табл. 61, стр. 477 */
lcd_write_byte(command_addr,0xA8);
lcd_write_byte(command_addr+1,0x70);
lcd_write_byte(command_addr+2,0xB8);
lcd_write_byte(command_addr+3,0xB3);
lcd_write_byte(command_addr+4,0x65);
lcd_write_byte(command_addr+5,0xBF);

/* Завершим программу бесконечным циклом */ 
while (1); 
}			// закрывающая скобка функции main
